Preparativos

Carga de los paquetes

library(sf)
library(raster)
library(leaflet)
library(leaflet.extras)
library(dplyr)

Carga de los datos

# Carga de la capa de cantones
cantones <-
  st_read(
    "https://raw.githubusercontent.com/gf0604-procesamientodatosgeograficos/2021i-datos/main/ign/delimitacion-territorial-administrativa/cr_cantones_simp_wgs84.geojson",
    quiet = TRUE
  )

# Carga de la capa de provincias
provincias <-
  st_read(
    "https://raw.githubusercontent.com/gf0604-procesamientodatosgeograficos/2021i-datos/main/ign/delimitacion-territorial-administrativa/cr_provincias_simp_wgs84.geojson",
    quiet = TRUE
  )

# Carga de los datos de primates 
primates <-
  st_read(
    "https://raw.githubusercontent.com/gf0604-procesamientodatosgeograficos/2021i-datos/main/gbif/primates-cr-registros.csv",
    options = c(
      "X_POSSIBLE_NAMES=decimalLongitude",
      "Y_POSSIBLE_NAMES=decimalLatitude"
    ),
    quiet = TRUE
  )

# Asignación del sistema de coordenadas
st_crs(primates) = 4326

Limpieza

primates <- 
  primates %>% 
  mutate(coordinateUncertaintyInMeters = as.numeric(coordinateUncertaintyInMeters)) %>%
  mutate(eventDate = as.Date(eventDate, "%Y-&m-%d"))
cat("cantidad original de registros: ", nrow(primates))
## cantidad original de registros:  4509
# Descartar registros con alta insertidumbre en la ubicacion
primates <- 
  primates %>%
  filter(!is.na(coordinateUncertaintyInMeters) & coordinateUncertaintyInMeters <= 1000)

cat("cantidad de registros depues de descartar los de alta incertitumbre en la ubicacion: ", nrow(primates))
## cantidad de registros depues de descartar los de alta incertitumbre en la ubicacion:  2444
# Agregar columnas de provincia y canton
primates <- 
  primates %>%
  st_join(cantones["provincia"]) %>%
  st_join(cantones["canton"])


# Descartar registros con provincia = NA
primates <- 
  primates %>%
  filter(!is.na(provincia))

cat("cantidad de registros depues de descartar los que no tienen provincia: ", nrow(primates))
## cantidad de registros depues de descartar los que no tienen provincia:  2387

Procesamiento y visualisaicon

Mapa de cantidad de registros por provincia

provincias_registros <-
  provincias %>%
  st_join(primates) %>%
  group_by(provincia.x) %>%
  summarize(registros = n()) 
#otro opcion -> summarize(registros = n_distinct(gbifID, na.rm = TRUE)) 
# Paleta de colores
colores_registros <-
  colorNumeric(
    palette = "YlGnBu",
    domain = provincias_registros$registros,
    na.color = "transparent"
  )

leaflet() %>%
  addTiles(group = "OMS") %>%
  addPolygons(
    data = provincias_registros,
    fillColor = ~ colores_registros(provincias_registros$registros),
    fillOpacity = 0.7,
    stroke = TRUE,
    color = "black",
    weight = 1,
    popup = paste(
      paste(
        "<strong>Provincia:</strong>",
        provincias_registros$provincia.x
      ),
      paste(
        "<strong>Altitud media:</strong>",
        round(provincias_registros$registros, digits = 2)
      ),
      sep = '<br/>'
    ),
    group = "Provincias - registros"
  ) %>%
  addCircleMarkers(
    data = primates,
    stroke = F,
    radius = 2,
    fillColor = 'black',
    fillOpacity = 1,
    popup = paste(
      primates$species,
      primates$provincia,
      primates$canton,
      primates$eventDate,
      paste0("<a href='", primates$occurrenceID, "'>Mas informacion</a>"),
      sep = '<br/>'
    ),
    group = "Primates"
  ) %>%
  addLayersControl(baseGroups = c("OMS"),
                   overlayGroups = c("Provincias - registros", "Primates")) %>%
  addLegend(
    position = "bottomleft",
    pal = colores_registros,
    values = provincias_registros$registros,
    group = "Provincias - registros",
    title = "Cantidad de registros"
  )

Mapa de cantidad de especies por provincia

Mapa agrupado (clustered)

# Paleta de colores
colores_registros <-
  colorNumeric(
    palette = "YlGnBu",
    domain = provincias_registros$registros,
    na.color = "transparent"
  )

leaflet() %>%
  addTiles(group = "OMS") %>%
  addPolygons(
    data = provincias_registros,
    fillColor = ~ colores_registros(provincias_registros$registros),
    fillOpacity = 0.7,
    stroke = TRUE,
    color = "black",
    weight = 1,
    popup = paste(
      paste(
        "<strong>Provincia:</strong>",
        provincias_registros$provincia.x
      ),
      paste(
        "<strong>Altitud media:</strong>",
        round(provincias_registros$registros, digits = 2)
      ),
      sep = '<br/>'
    ),
    group = "Provincias - registros"
  ) %>%
  addCircleMarkers(
    data = primates,
    stroke = F,
    radius = 2,
    fillColor = 'black',
    fillOpacity = 1,
    popup = paste(
      primates$species,
      primates$provincia,
      primates$canton,
      primates$eventDate,
      paste0("<a href='", primates$occurrenceID, "'>Mas informacion</a>"),
      sep = '<br/>'
    ),
    clusterOptions = markerClusterOptions(),
    group = "Primates"
  ) %>%
  addLayersControl(baseGroups = c("OMS"),
                   overlayGroups = c("Provincias - registros", "Primates")) %>%
  addLegend(
    position = "bottomleft",
    pal = colores_registros,
    values = provincias_registros$registros,
    group = "Provincias - registros",
    title = "Cantidad de registros"
  )

Mapa de calor